<?php

namespace app\job;

//use app\admin\model\consult\Order;
//use app\admin\model\consult\Order;
use app\admin\model\xlzxinfo\Xlzxinfo;
use app\common\model\User;
use think\Config;
use think\Db;
use think\Log;
use think\queue\Job;


/**
 * 咨询订单类
 * 用于处理队列中的任务
 */
class ConsultJob
{

    /**
     * fire是消息队列默认调用的方法
     * @param Job $job 当前的任务对象
     * @param array|mixed $data 发布任务时自定义的数据
     */
    public function fire(Job $job, $data)
    {
        Log::info('订单完成job,order_id:'.$data);
        if (empty($data)) {
            Log::error(sprintf('[%s][%s] 队列无消息', __CLASS__, __FUNCTION__));
            return;
        }

        //有效消息到达消费者时可能已经不再需要执行了
        if (!$this->checkJob($data)) {
            $job->delete();
            Log::record("Job does not need to be executed");
            return;
        }
        //执行业务处理
        if ($this->doJob($data)) {
            $order_id = $data;
            $order = Db::table('fa_consult_order')->where(['pay_status'=>'paid','status'=>2,'id'=>$order_id])->find();
            //更新订单
            if ($order){

                //计算佣金
                $commission_rate = Config::get('site.commission_rate');
                Log::info('计算佣金rate:'.$commission_rate);
                $commission_price = bcMath($order['price'],$commission_rate/100,'*',2);
                Log::info('计算佣金price:'.$commission_price);
                //更新订单
                Db::table('fa_consult_order')->where('id', $order_id)->update([
                    'server_end_time'=>datetime(time()),
                    'status'=>3,
                    'commission_price'=>$commission_price,
                    'commission_rate'=>$commission_rate,
                ]);
                //给咨询师分佣
                $xlzxinfo = Xlzxinfo::where(['id'=>$order['xlzxinfo_id']])->find();
                User::money($commission_price,$xlzxinfo['user_id'],'咨询订单佣金',7);
//                \think\Db::name('user')->where('id', $xlzxinfo['user_id'])->setInc('cumulative_gain',$commission_price);
                // $UserModel = new User();
                // $UserModel->where('id', $xlzxinfo['user_id'])->setInc('cumulative_gain',$commission_price);
            }

            $job->delete();//任务执行成功后删除
            Log::record("job has been down and deleted");
        } else {
            //检查任务重试次数
            if ($job->attempts() > 3) {
                Log::record("job has been retried more that 3 times");
//                $job->release(10); // 10秒后在执行
                $job->delete(); // 删除任务
            }
        }
    }

    /**
     * 消息在到达消费者时可能已经不需要执行了
     * @param array|mixed $data 发布任务时自定义的数据
     * @return boolean 任务执行的结果
     */
    private function checkJob($data)
    {
        Log::record('验证任务是否需要执行');
        $order_id = $data;
        Log::record('验证任务是否需要执行:'.$order_id);
//        $order = Order::where(['pay_status'=>'paid','status'=>2,'id'=>$order_id])->find();
//        $OrderModel = new Order();
        $order = Db::table('fa_consult_order')->where(['pay_status'=>'paid','status'=>2,'id'=>$order_id])->find();
        Log::record($order);
        if (!$order){
            return false;
        }
        return true;
    }

    /**
     * 根据消息中的数据进行实际的业务处理
     */
    private function doJob($data)
    {
        // 实际业务流程处理
//        print_r($data['msg'] ?? '实际业务流程处理');
        Log::record('实际业务流程处理');
        return true;
    }

    function task1(){
        print_r("task 1");
    }


    public function failed($data)
    {
        // ...任务达到最大重试次数后，失败了
        Log::error('任务达到最大重试次数后，失败了');
    }


}